package pers.wensheng.patterns.behavioral_pattern.memento_pattern.black_box;


/**
 * 备忘录模式
 * 黑箱模式：在管理者里面不可以访问备忘录的数据，只能发送获取
 * 只能获取 Memento 类型的数据，不能获取里面的具体信息，也就时只能发送，不能获取和修改信息
 */
public class Client {
    public static void main(String[] args) {
        //创建管理者角色
        RoleStateCaretaker roleStateCaretaker = new RoleStateCaretaker();
        //创建发起人角色
        GameRole gameRole = new GameRole();
        gameRole.initState();


        System.out.println("------------大战Boss前------------");
        System.out.println(gameRole);


        //备份
        Memento memento = gameRole.saveState();
        roleStateCaretaker.setRoleStateMemento(memento);


        System.out.println("------------大战Boss后------------");
        gameRole.fight();
        System.out.println(gameRole);


        System.out.println("------------管理者获取或无法修改备份的信息------------");
        Memento roleStateMemento = roleStateCaretaker.getRoleStateMemento();
        System.out.println(roleStateMemento);


        System.out.println("------------恢复之前状态------------");
        gameRole.recoverState(roleStateCaretaker.getRoleStateMemento());
        System.out.println(gameRole);
    }
}
